package comandos;


import java.util.LinkedList;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import excecoes.DAOException;

import allaboutmybook.GerenteConcretoPontosPositivosQueOLivroTem;
import allaboutmybook.GerentePontosPositivosQueOLivroTem;
import allaboutmybook.PontoPositivo;

public class EditarPontosPositivosDoLivroBean 
{
	private LinkedList<PontoPositivo> pontosPositivosPresentesNoLivro;
	private LinkedList<PontoPositivo> pontosPositivosNaoPresentesNoLivro;
	

	public LinkedList<PontoPositivo> getPontosPositivosPresentesNoLivro() {
		return pontosPositivosPresentesNoLivro;
	}
	public void setPontosPositivosPresentesNoLivro(
			LinkedList<PontoPositivo> pontosPositivosPresentesNoLivro) {
		this.pontosPositivosPresentesNoLivro = pontosPositivosPresentesNoLivro;
	}
	public LinkedList<PontoPositivo> getPontosPositivosNaoPresentesNoLivro() {
		return pontosPositivosNaoPresentesNoLivro;
	}
	public void setPontosPositivosNaoPresentesNoLivro(
			LinkedList<PontoPositivo> pontosPositivosNaoPresentesNoLivro) {
		this.pontosPositivosNaoPresentesNoLivro = pontosPositivosNaoPresentesNoLivro;
	}
	
	public String listarEditarPontosPositivosDoLivro()
	{
		try
		{
			GerentePontosPositivosQueOLivroTem conhecePontosPositivosDoLivro =
					GerenteConcretoPontosPositivosQueOLivroTem.getInstance();
			this.pontosPositivosPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosDoLivro();
			this.pontosPositivosNaoPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosQueOLivroNaoTem();
			
			return "successListarEditarPontosPositivosDoLivro";
		}
		catch(DAOException e)
		{
			FacesMessage mensagemDeErro = new FacesMessage("Problemas em acessar banco de dados. Tente novamente mais tarde");
			FacesContext.getCurrentInstance().addMessage("Problemas em acessar banco de dados. Tente novamente mais tarde", mensagemDeErro);
			
			return "failureListarEditarPontosPositivosDoLivro";
		}
	}
	
	public String adicionarNovoPontoPositivoNoLivro()
	{
		try
		{
			Map<String,String> parametrosDoMetodo = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
			String nomePontoPositivoASerAdicionado =
					parametrosDoMetodo.get("pontopositivoaseradicionado");
			GerentePontosPositivosQueOLivroTem conhecePontosPositivosDoLivro =
					GerenteConcretoPontosPositivosQueOLivroTem.getInstance();
			conhecePontosPositivosDoLivro.adicionarPontoPositivoParaOLivro(nomePontoPositivoASerAdicionado);
			
			this.pontosPositivosPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosDoLivro();
			this.pontosPositivosNaoPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosQueOLivroNaoTem();
			
			return "successAdicionarNovoPontoPositivoNoLivro";
		}
		catch(DAOException e)
		{
			FacesMessage mensagemDeErro = new FacesMessage("Problemas em acessar banco de dados. Tente novamente mais tarde");
			FacesContext.getCurrentInstance().addMessage("Problemas em acessar banco de dados. Tente novamente mais tarde", mensagemDeErro);
			
			return "failureAdicionarNovoPontoPositivoNoLivro";
		}
	}
	
	public String retirarPontoPositivoDoLivro()
	{
		try
		{
			Map<String,String> parametrosDoMetodo = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
			String nomePontoPositivoASerRemovido =
					parametrosDoMetodo.get("pontopositivoaserremovido");
			GerentePontosPositivosQueOLivroTem conhecePontosPositivosDoLivro =
					GerenteConcretoPontosPositivosQueOLivroTem.getInstance();
			conhecePontosPositivosDoLivro.removerPontoPositivoParaOLivro(nomePontoPositivoASerRemovido);
			
			this.pontosPositivosPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosDoLivro();
			this.pontosPositivosNaoPresentesNoLivro =
					conhecePontosPositivosDoLivro.pegarTodosOsPontosPositivosQueOLivroNaoTem();
			
			return "successRetirarPontoPositivoDoLivro";
		}
		catch(DAOException e)
		{
			FacesMessage mensagemDeErro = new FacesMessage("Problemas em acessar banco de dados. Tente novamente mais tarde");
			FacesContext.getCurrentInstance().addMessage("Problemas em acessar banco de dados. Tente novamente mais tarde", mensagemDeErro);
			
			return "failureRetirarPontosPositivosDoLivro";
		}
	}
}
